package com.xunge.task;

import com.xunge.mapper.HomeworkMapper;
import com.xunge.pojo.Homework;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 作业管理定时任务
 * 每隔一分钟检查作业截止时间，超期的作业状态设置为禁用
 */
@Slf4j
@Component
public class HomeworkTask {

    @Autowired
    private HomeworkMapper homeworkMapper;

    /**
     * 定时检查作业截止时间
     * 每隔五秒执行一次
     * 检查当前时间是否超过作业截止时间，如果超过则将作业状态设置为禁用(0)
     */
    @Scheduled(fixedRate = 5000) // 每隔5秒执行一次
    public void checkHomeworkDeadline() {
        log.info("开始执行作业截止时间检查任务...");
        
        try {
            // 查询所有进行中状态且截止时间已过的作业
            List<Homework> expiredHomeworks = homeworkMapper.findExpiredHomeworks();
            
            if (expiredHomeworks != null && !expiredHomeworks.isEmpty()) {
                log.info("发现 {} 个已过期的作业，开始更新状态", expiredHomeworks.size());
                
                for (Homework homework : expiredHomeworks) {
                    // 更新作业状态为禁用(0)
                    homework.setStatus(0);
                    homework.setUpdateTime(LocalDateTime.now());
                    
                    // 更新数据库
                    int result = homeworkMapper.update(homework);
                    if (result > 0) {
                        log.info("作业 [{}] 状态已更新为禁用，原截止时间: {}", 
                                homework.getTitle(), homework.getDueDate());
                    } else {
                        log.warn("作业 [{}] 状态更新失败", homework.getTitle());
                    }
                }
                
                log.info("作业截止时间检查任务执行完成，共处理 {} 个过期作业", expiredHomeworks.size());
            } else {
                log.info("没有发现过期的作业");
            }
            
        } catch (Exception e) {
            log.error("执行作业截止时间检查任务时发生错误", e);
        }
    }
}